#include "head.h"

/*
#include <pthread.h>
void pthread_exit(void *retval);
功能：
    pthread_exit 函数用于在线程内部结束线程的执行，
    并可选地返回一个指针 retval,作为线程的退出状态
参数：
    retval:一个 void*类型的指针，表示线程的退出状态。
    可以传递任意类型的数据作为线程函数的返回值。
返回值：
    无


int pthread_join(pthread_t thread,void **retval);
功能：
    1、在主线称重 等待 线程结束 会阻塞等待 直到目标结束
    2、获取主线程退出状态 通过 retval 来获取退出的状态 通过return 返回的值
参数：
    thread：被等待的线程的标识符，即目标线程的 p_thread_t 类型的标识符
    retval：一个指向指针的指针，用于存储等待线程的退出状态。
返回值：
    成功：返回0
    失败：返回错误编号
*/
typedef struct stu
{
    int id;
    int age;
    char name[128];
}stu;

void func_1(void *stu_1)
{
    printf("%d\n",*(int *)stu_1);

    int * val = stu_1;
    *val=70;

    // 线程结束时返回一个指针 val，指向修改后的值
    pthread_exit((void *)val);
}

int main(int argc,char const *argv[])
{
    //主变量中声明一个整型变量num_1 并初始化为10
    int num_1 = 10;

    //声明一个pthread_t类型的变量Tid，用于保存线程的ID
    pthread_t Tid=0;

    // 创建一个线程，传入 func_1 函数并传递 num_1 的地址作为参数
    pthread_create(&Tid,NULL,func_1,(void *)&num_1);// 传递 num_1 的地址给线程函数

    //回收线程
    int val = 10;// 在主线程中声明一个整型变量 val 并初始化为 10
    int *num = &val;// 声明一个指向整型的指针 num，指向 val   

    // 等待线程完成，并获取线程的返回值，存入 num 指针
    pthread_join(Tid,(void *)&num);// 将 num 的地址传递给 pthread_join，接收线程返回的结果
    printf("%d\n",*num);

    return 0;
}